/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：呼叫中心-系统通用工具封装层
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taiping.cc.application.tools;

import com.taiping.cc.application.constant.DefaultConstant;
import com.taiping.cc.application.support.GenericTools;
import com.taiping.dlt.pojo.bo.AuthLoginBO;
import com.taipingframework.boot.session.constant.SessionCacheKeyEnum;
import com.taipingframework.boot.session.core.CommonSessionHandler;
import com.taipingframework.utility.context.SpringContextHolder;
import com.taipingframework.utility.exception.UtilityException;
import org.springframework.lang.NonNull;

import javax.servlet.http.HttpSession;

public class SessionUserUtils {

    private static CommonSessionHandler commonSessionHandler;

    static {
        SessionUserUtils.commonSessionHandler = SpringContextHolder.getBean(CommonSessionHandler.class);
    }

    /**
     * 获取当前登录账号名
     */
    public static AuthLoginBO getCurrentUser() throws UtilityException {
        try {
            HttpSession session = commonSessionHandler.getSession();
//            HttpSession session = ServletHelper.getRequest().getSession(false);
//            if (session == null) {
//                throw new SystemInterrupterException(ApiStatusEnum.ERR_A0230);
//            }
            // 获取当前登录用户的缓存数据，可以通过下面三种方式：
            // CommonCacheHandler
            // AuthLoginBO currentUser = sessionHandler.getAttribute(SessionCacheKeyEnum.CURRENT_USER_INFO, AuthLoginBO.class)
            Object currentUserAttribute = session.getAttribute(SessionCacheKeyEnum.CURRENT_USER_INFO.getKey());
            return GenericTools.convertAuthLoginFromObject(currentUserAttribute);
        } catch (Exception e) {
            throw new UtilityException(e);
        }
    }

    /**
     * 后端线程执行无状态的任务时，使用默认账户。
     */
    @NonNull
    public static AuthLoginBO getDefaultUser() {
        AuthLoginBO authLoginBO = new AuthLoginBO();
        authLoginBO.setLoginId(DefaultConstant.LOGIN_ID);
        authLoginBO.setLoginName(DefaultConstant.LOGIN_NAME);
        return authLoginBO;
    }

}
